package cliente;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;

import utilidad.SocketManager;

import java.awt.Button;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class VentanaBuscarVariable extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 231954543118549781L;
	
	private JPanel contentPane;
	private JTextField txtOpcion;
	private JComboBox comboBox;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				VentanaBuscarVariable frame = new VentanaBuscarVariable(null);
				frame.setVisible(true);
				
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaBuscarVariable(final SocketManager sm) {
		setTitle(".:: Sistema Seguridad: Buscar Variable Control ::.");
		
		setBounds(100, 100, 450, 225);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblOpcin = new JLabel("Tipo");
		lblOpcin.setFont(new Font("Times New Roman", Font.BOLD, 14));
		lblOpcin.setHorizontalAlignment(SwingConstants.CENTER);
		lblOpcin.setBounds(39, 35, 64, 30);
		contentPane.add(lblOpcin);
		
		JLabel lblNewLabel = new JLabel("Expresion");
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setFont(new Font("Times New Roman", Font.BOLD, 14));
		lblNewLabel.setBounds(39, 85, 64, 30);
		contentPane.add(lblNewLabel);
		
		txtOpcion = new JTextField();
		txtOpcion.setFont(new Font("Times New Roman", Font.PLAIN, 14));
		txtOpcion.setHorizontalAlignment(SwingConstants.CENTER);
		txtOpcion.setText("(a*, abc?)");
		txtOpcion.setBounds(150, 85, 250, 30);
		contentPane.add(txtOpcion);
		txtOpcion.setColumns(10);
		
		comboBox = new JComboBox();
		DefaultComboBoxModel<String> def=new DefaultComboBoxModel();
		def.addElement("Todas");
		def.addElement("Variables");
		def.addElement("Estado");
		def.addElement("Placa");
		comboBox.setModel(def);
		comboBox.setBounds(150, 35, 250, 30);
		contentPane.add(comboBox);
		
		Button button = new Button("Buscar");
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String opcion=txtOpcion.getText();
				if(opcion.equals("") || opcion.equals("(a*, abc?)"))
				{
					JOptionPane.showMessageDialog(null, "¡Error! No se ha introducido una expresión correcta.","¡Ups!", JOptionPane.ERROR_MESSAGE);
				}
				else
				{
					opcion=opcion.replace('*','%');
					opcion=opcion.replace('?','_');
					
					String eleccion=(String)comboBox.getSelectedItem();
					
					String sentenciaAEnviar="BUSCAR "+eleccion+" "+opcion;
					//realizar el envio de la busqueda
					boolean normal=true;
					if(eleccion.equals("Todas") || eleccion.equals("Estado"))
					{
						normal=false;
					}
					boolean encontrado=false;
					
					String codigo = "";
					System.out.println("Sentencia enviada:" + sentenciaAEnviar);
					//Placa/variable
					ArrayList <String> lineastemp=new ArrayList<String>();
					//Cuando es todas o estado
					ArrayList<String>lineastemp2= new ArrayList<String>();
					try {
						try{
							sm.Escribir(sentenciaAEnviar + '\n');
							}
							catch(SocketException e)
							{
								JOptionPane.showMessageDialog(null, "Parece que el administrador del servidor le ha cerrado la conexión. Intente conectarse más tarde.", "¡Ups!", JOptionPane.ERROR_MESSAGE);
							}
						
						int numLineas=0;
						boolean nofin=false;
						while(!nofin)
						{
							String temporal=sm.Leer();
							System.out.println("ESTE ESSS"+temporal);
							if(normal)
							{
							
								if(temporal.equals("202 FINLISTA") || temporal.equals("202 FINLISTAPLACA"))
								{
									nofin=true;
								}
								else
								{
									numLineas++;
									if(eleccion.equals("Placa"))
									{
										lineastemp2.add(temporal);
									}
									else
									{
										lineastemp.add(temporal);
									}
								}
							}
							else
							{
								if((temporal.equals("202 FINLISTA")) || (temporal.equals("202 FINLISTAPLACA")))
								{
									System.out.println("SALGO YA!");
									break;
								}
								else
								{
									
									if(temporal.equals("203 FINLISTAVAR"))
									{
										encontrado=true;
										temporal=sm.Leer();
									}
									
									if(!encontrado)
									{
										lineastemp.add(temporal);
									}
									else
									{
										if(temporal.equals("202 FINLISTA") || temporal.equals("202 FINLISTAPLACA"))
										{
											break;
										}
										else
										{
										lineastemp2.add(temporal);
										}
									}
								}
								
							}
						}
						System.out.println(lineastemp.size());
						System.out.println(lineastemp2.size());
						
						VentanaMostrarbusqueda vMB = new VentanaMostrarbusqueda(lineastemp, lineastemp2, eleccion);
						dispose();
						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						JOptionPane.showMessageDialog(null, "Parece que el administrador del servidor le ha cerrado la conexión. Intente conectarse más tarde.", "¡Ups!", JOptionPane.ERROR_MESSAGE);
						System.exit(0);
						e.printStackTrace();
					}
					
					
				}
				
			}
		});
		button.setBounds(100, 140, 90, 25);
		contentPane.add(button);
		
		Button button_1 = new Button("Borrar");
		button_1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				txtOpcion.setText("");
			}
		});
		button_1.setBounds(228, 140, 90, 25);
		contentPane.add(button_1);
		
		setLocationRelativeTo(null);
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
}
